/**
 * 服务工厂类
 * 提供统一的服务访问入口
 */
import { JSONDataService } from './data/JSONDataService';

export class ServiceFactory {
  // 单例实例
  private static instance: ServiceFactory;
  
  // 服务初始化状态
  private static isInitialized: boolean = false;
  
  // 初始化Promise缓存，避免重复初始化
  private static initializationPromise: Promise<void> | null = null;
  
  /**
   * 私有构造函数
   */
  private constructor() {
    // JSONDataService使用静态方法，不需要实例化
  }
  
  /**
   * 获取服务工厂实例
   * @returns 服务工厂实例
   */
  public static getInstance(): ServiceFactory {
    if (!ServiceFactory.instance) {
      ServiceFactory.instance = new ServiceFactory();
    }
    return ServiceFactory.instance;
  }
  
  /**
   * 获取数据服务
   * @returns 数据服务实例
   */
  public getDataService() {
    return JSONDataService;
  }
  
  /**
   * 检查服务是否已初始化
   * @returns 是否已初始化
   */
  public isInitialized(): boolean {
    return ServiceFactory.isInitialized;
  }
  
  /**
   * 初始化所有服务
   */
  public static async initialize(): Promise<void> {
    // 避免重复初始化
    if (this.isInitialized) {
      console.log('ServiceFactory 已初始化');
      return;
    }
    
    // 如果初始化正在进行中，返回同一个Promise
    if (this.initializationPromise) {
      return this.initializationPromise;
    }
    
    try {
      // 创建初始化Promise并缓存
      this.initializationPromise = this.doInitialize();
      await this.initializationPromise;
      return;
    } catch (error) {
      // 初始化失败时清除缓存的Promise
      this.initializationPromise = null;
      console.error('服务初始化失败:', error);
      throw error;
    }
  }
  
  /**
   * 执行实际的初始化操作
   */
  private static async doInitialize(): Promise<void> {
    try {
      // 初始化数据服务
      await JSONDataService.initialize();
      
      // 设置初始化状态
      this.isInitialized = true;
      console.log('所有服务初始化成功');
    } catch (error) {
      console.error('数据服务初始化失败:', error);
      throw error;
    }
  }
}